package eu.jk.base.security;

/**
 * 包含一些常用的验证函数(静态)的类
 * @author wenjianwzz
 * @version 0.5
 * @since wzz.eu 0.5
 */

public class AuthFilter {

	public static String removeHtmlTag(String str){
		StringBuffer sb=new StringBuffer();
		boolean tag=false;
		for(int i=0;i<str.length();i++){
			char c=str.charAt(i);
			switch(c){
			case '<':
				tag=true;
				break;
			case '>':
				tag=false;
				break;
			default:
				if(!tag)
					sb.append(c);
			}
		}
		return sb.toString();
	}
	/**
	 * 过滤HTML标签
	 * @param 需要过滤的字符串
	 * @return 过滤后的字符串
	 */
	public static String htmlTagFilter(String s) {
		if (s == null)
			return null;
		StringBuffer sb = new StringBuffer();
		int n = s.length();
		for (int i = 0; i < n; i++) {
			char c = s.charAt(i);
			switch (c) {
			case ' ':
				sb.append("&nbsp;");
				break;
			case '\r':
				sb.append("<br/>");
				break;
			case '\'':
				sb.append("&#039;");
				break;
			case '<':
				sb.append("&lt;");
				break;
			case '>':
				sb.append("&gt;");
				break;
			case '&':
				sb.append("&amp;");
				break;
			case '"':
				sb.append("&quot;");
				break;
			default:
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 去除传入字符串中的script标签
	 * @param String
	 * @return 过滤后的字符串
	 */
	public static String scriptTagFilter(String s) {
		if (s == null)
			return null;
		StringBuffer sb = new StringBuffer(s);
		remove(sb,"<SCRIPT");
		return sb.toString();
	}
	
	/**
	 * 判断一个字符串是不是数字
	 * @param str
	 * @return boolean
	 */
	public static boolean isDigit(String str)
	{
		if(str==null)
			return false;
		for(int i=0;i<str.length();i++)
		{
			char c=str.charAt(i);
			if(c<48||c>57)
				return false;
		}
		return true;
	}
	
	
	private static boolean remove(StringBuffer sb,String sub)
	{
		if(sb==null||sub==null||sb.length()<sub.length())
			return false;
		int i;
		while((i=indexOf(sb,sub))>0)
		{
			sb.delete(i, i+sub.length());
		}
		return true;
	}
	private static int indexOf(StringBuffer sb,String sub)
	{
		int i;
		int j=0;
		int index=0;
		boolean flag=false;
		for(i=0;i<sb.length();i++)
		{
			if((toUpperCase(sb.charAt(i)))==(toUpperCase(sub.charAt(j))))
			{
				flag=true;
				j++;
				if(j==sub.length())
					break;
			}
			else
			{
				if(flag)
				{
					flag=false;
					j=1;
				}
				else
					j=0;
				index=i;
			}
		}
		if(flag)
			return index+1;
		return -1;
	}
	
	private static char toUpperCase(char c)
	{
		if((int)c>=97&&(int)c<=122)
			return (char) (c-32);
		return c;
	}
}
